//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS ECRPublic service.
///
/// Amazon Elastic Container Registry Public Amazon Elastic Container Registry Public (Amazon ECR Public) is a managed container image registry service. Amazon ECR provides both public and private registries to host your container images. You can use the Docker CLI or your preferred client to push, pull, and manage images. Amazon ECR provides a secure, scalable, and reliable registry for your Docker or Open Container Initiative (OCI) images. Amazon ECR supports public repositories with this API. For information about the Amazon ECR API for private repositories, see Amazon Elastic Container Registry API Reference.
public struct ECRPublic: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the ECRPublic client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "SpencerFrontendService",
            serviceName: "ECRPublic",
            serviceIdentifier: "api.ecr-public",
            signingName: "ecr-public",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2020-10-30",
            endpoint: endpoint,
            serviceEndpoints: Self.serviceEndpoints,
            variantEndpoints: Self.variantEndpoints,
            errorType: ECRPublicErrorType.self,
            xmlNamespace: "http://ecr-public.amazonaws.com/doc/2020-12-02/",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }


    /// custom endpoints for regions
    static var serviceEndpoints: [String: String] {[
        "us-east-1": "api.ecr-public.us-east-1.amazonaws.com",
        "us-west-2": "api.ecr-public.us-west-2.amazonaws.com"
    ]}


    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack]: .init(endpoints: [
            "us-east-1": "ecr-public.us-east-1.api.aws"
        ])
    ]}

    // MARK: API Calls

    /// Checks the availability of one or more image layers that are within a repository in a public registry. When an image is pushed to a repository, each image layer is checked to verify if it has been uploaded before. If it has been uploaded, then the image layer is skipped.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    @Sendable
    @inlinable
    public func batchCheckLayerAvailability(_ input: BatchCheckLayerAvailabilityRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchCheckLayerAvailabilityResponse {
        try await self.client.execute(
            operation: "BatchCheckLayerAvailability", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Checks the availability of one or more image layers that are within a repository in a public registry. When an image is pushed to a repository, each image layer is checked to verify if it has been uploaded before. If it has been uploaded, then the image layer is skipped.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    ///
    /// Parameters:
    ///   - layerDigests: The digests of the image layers to check.
    ///   - registryId: The Amazon Web Services account ID, or registry alias, associated with the public registry that contains the image layers to check. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that's associated with the image layers to check.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchCheckLayerAvailability(
        layerDigests: [String],
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchCheckLayerAvailabilityResponse {
        let input = BatchCheckLayerAvailabilityRequest(
            layerDigests: layerDigests, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.batchCheckLayerAvailability(input, logger: logger)
    }

    /// Deletes a list of specified images that are within a repository in a public registry. Images are specified with either an imageTag or imageDigest. You can remove a tag from an image by specifying the image's tag in your request. When you remove the last tag from an image, the image is deleted from your repository. You can completely delete an image (and all of its tags) by specifying the digest of the image in your request.
    @Sendable
    @inlinable
    public func batchDeleteImage(_ input: BatchDeleteImageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDeleteImageResponse {
        try await self.client.execute(
            operation: "BatchDeleteImage", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a list of specified images that are within a repository in a public registry. Images are specified with either an imageTag or imageDigest. You can remove a tag from an image by specifying the image's tag in your request. When you remove the last tag from an image, the image is deleted from your repository. You can completely delete an image (and all of its tags) by specifying the digest of the image in your request.
    ///
    /// Parameters:
    ///   - imageIds: A list of image ID references that correspond to images to delete. The format of the imageIds reference is imageTag=tag or imageDigest=digest.
    ///   - registryId: The Amazon Web Services account ID, or registry alias, that's associated with the registry that contains the image to delete. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The repository in a public registry that contains the image to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDeleteImage(
        imageIds: [ImageIdentifier],
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDeleteImageResponse {
        let input = BatchDeleteImageRequest(
            imageIds: imageIds, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.batchDeleteImage(input, logger: logger)
    }

    /// Informs Amazon ECR that the image layer upload is complete for a specified public registry, repository name, and upload ID. You can optionally provide a sha256 digest of the image layer for data validation purposes. When an image is pushed, the CompleteLayerUpload API is called once for each new image layer to verify that the upload is complete.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    @Sendable
    @inlinable
    public func completeLayerUpload(_ input: CompleteLayerUploadRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CompleteLayerUploadResponse {
        try await self.client.execute(
            operation: "CompleteLayerUpload", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Informs Amazon ECR that the image layer upload is complete for a specified public registry, repository name, and upload ID. You can optionally provide a sha256 digest of the image layer for data validation purposes. When an image is pushed, the CompleteLayerUpload API is called once for each new image layer to verify that the upload is complete.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    ///
    /// Parameters:
    ///   - layerDigests: The sha256 digest of the image layer.
    ///   - registryId: The Amazon Web Services account ID, or registry alias, associated with the registry where layers are uploaded. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository in a public registry to associate with the image layer.
    ///   - uploadId: The upload ID from a previous InitiateLayerUpload operation to associate with the image layer.
    ///   - logger: Logger use during operation
    @inlinable
    public func completeLayerUpload(
        layerDigests: [String],
        registryId: String? = nil,
        repositoryName: String,
        uploadId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CompleteLayerUploadResponse {
        let input = CompleteLayerUploadRequest(
            layerDigests: layerDigests, 
            registryId: registryId, 
            repositoryName: repositoryName, 
            uploadId: uploadId
        )
        return try await self.completeLayerUpload(input, logger: logger)
    }

    /// Creates a repository in a public registry. For more information, see Amazon ECR repositories in the Amazon Elastic Container Registry User Guide.
    @Sendable
    @inlinable
    public func createRepository(_ input: CreateRepositoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRepositoryResponse {
        try await self.client.execute(
            operation: "CreateRepository", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a repository in a public registry. For more information, see Amazon ECR repositories in the Amazon Elastic Container Registry User Guide.
    ///
    /// Parameters:
    ///   - catalogData: The details about the repository that are publicly visible in the Amazon ECR Public Gallery.
    ///   - repositoryName: The name to use for the repository. This appears publicly in the Amazon ECR Public Gallery. The repository name can be specified on its own (for example nginx-web-app) or prepended with a namespace to group the repository into a category (for example project-a/nginx-web-app).
    ///   - tags: The metadata that you apply to each repository to help categorize and organize your repositories. Each tag consists of a key and an optional value. You define both of them. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRepository(
        catalogData: RepositoryCatalogDataInput? = nil,
        repositoryName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRepositoryResponse {
        let input = CreateRepositoryRequest(
            catalogData: catalogData, 
            repositoryName: repositoryName, 
            tags: tags
        )
        return try await self.createRepository(input, logger: logger)
    }

    /// Deletes a repository in a public registry. If the repository contains images, you must either manually delete all images in the repository or use the force option. This option deletes all images on your behalf before deleting the repository.
    @Sendable
    @inlinable
    public func deleteRepository(_ input: DeleteRepositoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRepositoryResponse {
        try await self.client.execute(
            operation: "DeleteRepository", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a repository in a public registry. If the repository contains images, you must either manually delete all images in the repository or use the force option. This option deletes all images on your behalf before deleting the repository.
    ///
    /// Parameters:
    ///   - force:  The force option can be used to delete a repository that contains images. If the force option is not used, the repository must be empty prior to deletion.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository to delete. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRepository(
        force: Bool? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRepositoryResponse {
        let input = DeleteRepositoryRequest(
            force: force, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.deleteRepository(input, logger: logger)
    }

    /// Deletes the repository policy that's associated with the specified repository.
    @Sendable
    @inlinable
    public func deleteRepositoryPolicy(_ input: DeleteRepositoryPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRepositoryPolicyResponse {
        try await self.client.execute(
            operation: "DeleteRepositoryPolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the repository policy that's associated with the specified repository.
    ///
    /// Parameters:
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository policy to delete. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that's associated with the repository policy to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRepositoryPolicy(
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRepositoryPolicyResponse {
        let input = DeleteRepositoryPolicyRequest(
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.deleteRepositoryPolicy(input, logger: logger)
    }

    /// Returns the image tag details for a repository in a public registry.
    @Sendable
    @inlinable
    public func describeImageTags(_ input: DescribeImageTagsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeImageTagsResponse {
        try await self.client.execute(
            operation: "DescribeImageTags", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the image tag details for a repository in a public registry.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeImageTags in paginated output. When this parameter is used, DescribeImageTags only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeImageTags request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeImageTags returns up to 100 results and a nextToken value, if applicable. If you specify images with imageIds, you can't use this option.
    ///   - nextToken: The nextToken value that's returned from a previous paginated DescribeImageTags request where maxResults was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the nextToken value. If there are no more results to return, this value is null. If you specify images with imageIds, you can't use this option.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository where images are described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that contains the image tag details to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeImageTags(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeImageTagsResponse {
        let input = DescribeImageTagsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.describeImageTags(input, logger: logger)
    }

    /// Returns metadata that's related to the images in a repository in a public registry.  Beginning with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the docker images command shows the uncompressed image size. Therefore, it might return a larger image size than the image sizes that are returned by DescribeImages.
    @Sendable
    @inlinable
    public func describeImages(_ input: DescribeImagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeImagesResponse {
        try await self.client.execute(
            operation: "DescribeImages", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata that's related to the images in a repository in a public registry.  Beginning with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the docker images command shows the uncompressed image size. Therefore, it might return a larger image size than the image sizes that are returned by DescribeImages.
    ///
    /// Parameters:
    ///   - imageIds: The list of image IDs for the requested repository.
    ///   - maxResults: The maximum number of repository results that's returned by DescribeImages in paginated output. When this parameter is used, DescribeImages only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeImages request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeImages returns up to 100 results and a nextToken value, if applicable. If you specify images with imageIds, you can't use this option.
    ///   - nextToken: The nextToken value that's returned from a previous paginated DescribeImages request where maxResults was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the nextToken value. If there are no more results to return, this value is null. If you specify images with imageIds, you can't use this option.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository where images are described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The repository that contains the images to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeImages(
        imageIds: [ImageIdentifier]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeImagesResponse {
        let input = DescribeImagesRequest(
            imageIds: imageIds, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.describeImages(input, logger: logger)
    }

    /// Returns details for a public registry.
    @Sendable
    @inlinable
    public func describeRegistries(_ input: DescribeRegistriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRegistriesResponse {
        try await self.client.execute(
            operation: "DescribeRegistries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns details for a public registry.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeRegistries in paginated output. When this parameter is used, DescribeRegistries only returns maxResults results in a single page along with a nextToken response element. The remaining results of the initial request can be seen by sending another DescribeRegistries request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeRegistries returns up to 100 results and a nextToken value, if applicable.
    ///   - nextToken: The nextToken value that's returned from a previous paginated DescribeRegistries request where maxResults was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the nextToken value. If there are no more results to return, this value is null.  This token should be treated as an opaque identifier that is only used to retrieve the next items in a list and not for other programmatic purposes.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRegistries(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRegistriesResponse {
        let input = DescribeRegistriesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeRegistries(input, logger: logger)
    }

    /// Describes repositories that are in a public registry.
    @Sendable
    @inlinable
    public func describeRepositories(_ input: DescribeRepositoriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRepositoriesResponse {
        try await self.client.execute(
            operation: "DescribeRepositories", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes repositories that are in a public registry.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeRepositories in paginated output. When this parameter is used, DescribeRepositories only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeRepositories request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeRepositories returns up to 100 results and a nextToken value, if applicable. If you specify repositories with repositoryNames, you can't use this option.
    ///   - nextToken: The nextToken value that's returned from a previous paginated DescribeRepositories request where maxResults was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the nextToken value. If there are no more results to return, this value is null. If you specify repositories with repositoryNames, you can't use this option.  This token should be treated as an opaque identifier that is only used to retrieve the next items in a list and not for other programmatic purposes.
    ///   - registryId: The Amazon Web Services account ID that's associated with the registry that contains the repositories to be described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryNames: A list of repositories to describe. If this parameter is omitted, then all repositories in a registry are described.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRepositories(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        registryId: String? = nil,
        repositoryNames: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRepositoriesResponse {
        let input = DescribeRepositoriesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            registryId: registryId, 
            repositoryNames: repositoryNames
        )
        return try await self.describeRepositories(input, logger: logger)
    }

    /// Retrieves an authorization token. An authorization token represents your IAM authentication credentials. You can use it to access any Amazon ECR registry that your IAM principal has access to. The authorization token is valid for 12 hours. This API requires the ecr-public:GetAuthorizationToken and sts:GetServiceBearerToken permissions.
    @Sendable
    @inlinable
    public func getAuthorizationToken(_ input: GetAuthorizationTokenRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAuthorizationTokenResponse {
        try await self.client.execute(
            operation: "GetAuthorizationToken", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves an authorization token. An authorization token represents your IAM authentication credentials. You can use it to access any Amazon ECR registry that your IAM principal has access to. The authorization token is valid for 12 hours. This API requires the ecr-public:GetAuthorizationToken and sts:GetServiceBearerToken permissions.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getAuthorizationToken(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAuthorizationTokenResponse {
        let input = GetAuthorizationTokenRequest(
        )
        return try await self.getAuthorizationToken(input, logger: logger)
    }

    /// Retrieves catalog metadata for a public registry.
    @Sendable
    @inlinable
    public func getRegistryCatalogData(_ input: GetRegistryCatalogDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRegistryCatalogDataResponse {
        try await self.client.execute(
            operation: "GetRegistryCatalogData", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves catalog metadata for a public registry.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getRegistryCatalogData(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRegistryCatalogDataResponse {
        let input = GetRegistryCatalogDataRequest(
        )
        return try await self.getRegistryCatalogData(input, logger: logger)
    }

    /// Retrieve catalog metadata for a repository in a public registry. This metadata is displayed publicly in the Amazon ECR Public Gallery.
    @Sendable
    @inlinable
    public func getRepositoryCatalogData(_ input: GetRepositoryCatalogDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRepositoryCatalogDataResponse {
        try await self.client.execute(
            operation: "GetRepositoryCatalogData", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve catalog metadata for a repository in a public registry. This metadata is displayed publicly in the Amazon ECR Public Gallery.
    ///
    /// Parameters:
    ///   - registryId: The Amazon Web Services account ID that's associated with the registry that contains the repositories to be described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository to retrieve the catalog metadata for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRepositoryCatalogData(
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRepositoryCatalogDataResponse {
        let input = GetRepositoryCatalogDataRequest(
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.getRepositoryCatalogData(input, logger: logger)
    }

    /// Retrieves the repository policy for the specified repository.
    @Sendable
    @inlinable
    public func getRepositoryPolicy(_ input: GetRepositoryPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRepositoryPolicyResponse {
        try await self.client.execute(
            operation: "GetRepositoryPolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the repository policy for the specified repository.
    ///
    /// Parameters:
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository with the policy to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRepositoryPolicy(
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRepositoryPolicyResponse {
        let input = GetRepositoryPolicyRequest(
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.getRepositoryPolicy(input, logger: logger)
    }

    /// Notifies Amazon ECR that you intend to upload an image layer. When an image is pushed, the InitiateLayerUpload API is called once for each image layer that hasn't already been uploaded. Whether an image layer uploads is determined by the BatchCheckLayerAvailability API action.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    @Sendable
    @inlinable
    public func initiateLayerUpload(_ input: InitiateLayerUploadRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> InitiateLayerUploadResponse {
        try await self.client.execute(
            operation: "InitiateLayerUpload", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Notifies Amazon ECR that you intend to upload an image layer. When an image is pushed, the InitiateLayerUpload API is called once for each image layer that hasn't already been uploaded. Whether an image layer uploads is determined by the BatchCheckLayerAvailability API action.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    ///
    /// Parameters:
    ///   - registryId: The Amazon Web Services account ID, or registry alias, that's associated with the registry to which you intend to upload layers. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that you want to upload layers to.
    ///   - logger: Logger use during operation
    @inlinable
    public func initiateLayerUpload(
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InitiateLayerUploadResponse {
        let input = InitiateLayerUploadRequest(
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.initiateLayerUpload(input, logger: logger)
    }

    /// List the tags for an Amazon ECR Public resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the tags for an Amazon ECR Public resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) that identifies the resource to list the tags for. Currently, the supported resource is an Amazon ECR Public repository.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Creates or updates the image manifest and tags that are associated with an image. When an image is pushed and all new image layers have been uploaded, the PutImage API is called once to create or update the image manifest and the tags that are associated with the image.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    @Sendable
    @inlinable
    public func putImage(_ input: PutImageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutImageResponse {
        try await self.client.execute(
            operation: "PutImage", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates the image manifest and tags that are associated with an image. When an image is pushed and all new image layers have been uploaded, the PutImage API is called once to create or update the image manifest and the tags that are associated with the image.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    ///
    /// Parameters:
    ///   - imageDigest: The image digest of the image manifest that corresponds to the image.
    ///   - imageManifest: The image manifest that corresponds to the image to be uploaded.
    ///   - imageManifestMediaType: The media type of the image manifest. If you push an image manifest that doesn't contain the mediaType field, you must specify the imageManifestMediaType in the request.
    ///   - imageTag: The tag to associate with the image. This parameter is required for images that use the Docker Image Manifest V2 Schema 2 or Open Container Initiative (OCI) formats.
    ///   - registryId: The Amazon Web Services account ID, or registry alias, that's associated with the public registry that contains the repository where the image is put. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository where the image is put.
    ///   - logger: Logger use during operation
    @inlinable
    public func putImage(
        imageDigest: String? = nil,
        imageManifest: String,
        imageManifestMediaType: String? = nil,
        imageTag: String? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutImageResponse {
        let input = PutImageRequest(
            imageDigest: imageDigest, 
            imageManifest: imageManifest, 
            imageManifestMediaType: imageManifestMediaType, 
            imageTag: imageTag, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.putImage(input, logger: logger)
    }

    /// Create or update the catalog data for a public registry.
    @Sendable
    @inlinable
    public func putRegistryCatalogData(_ input: PutRegistryCatalogDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutRegistryCatalogDataResponse {
        try await self.client.execute(
            operation: "PutRegistryCatalogData", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create or update the catalog data for a public registry.
    ///
    /// Parameters:
    ///   - displayName: The display name for a public registry. The display name is shown as the repository author in the Amazon ECR Public Gallery.  The registry display name is only publicly visible in the Amazon ECR Public Gallery for verified accounts.
    ///   - logger: Logger use during operation
    @inlinable
    public func putRegistryCatalogData(
        displayName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutRegistryCatalogDataResponse {
        let input = PutRegistryCatalogDataRequest(
            displayName: displayName
        )
        return try await self.putRegistryCatalogData(input, logger: logger)
    }

    /// Creates or updates the catalog data for a repository in a public registry.
    @Sendable
    @inlinable
    public func putRepositoryCatalogData(_ input: PutRepositoryCatalogDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutRepositoryCatalogDataResponse {
        try await self.client.execute(
            operation: "PutRepositoryCatalogData", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates the catalog data for a repository in a public registry.
    ///
    /// Parameters:
    ///   - catalogData: An object containing the catalog data for a repository. This data is publicly visible in the Amazon ECR Public Gallery.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry the repository is in. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository to create or update the catalog data for.
    ///   - logger: Logger use during operation
    @inlinable
    public func putRepositoryCatalogData(
        catalogData: RepositoryCatalogDataInput,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutRepositoryCatalogDataResponse {
        let input = PutRepositoryCatalogDataRequest(
            catalogData: catalogData, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.putRepositoryCatalogData(input, logger: logger)
    }

    /// Applies a repository policy to the specified public repository to control access permissions. For more information, see Amazon ECR Repository Policies in the Amazon Elastic Container Registry User Guide.
    @Sendable
    @inlinable
    public func setRepositoryPolicy(_ input: SetRepositoryPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SetRepositoryPolicyResponse {
        try await self.client.execute(
            operation: "SetRepositoryPolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Applies a repository policy to the specified public repository to control access permissions. For more information, see Amazon ECR Repository Policies in the Amazon Elastic Container Registry User Guide.
    ///
    /// Parameters:
    ///   - force: If the policy that you want to set on a repository policy would prevent you from setting another policy in the future, you must force the SetRepositoryPolicy operation. This prevents accidental repository lockouts.
    ///   - policyText: The JSON repository policy text to apply to the repository. For more information, see Amazon ECR Repository Policies in the Amazon Elastic Container Registry User Guide.
    ///   - registryId: The Amazon Web Services account ID that's associated with the registry that contains the repository. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository to receive the policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func setRepositoryPolicy(
        force: Bool? = nil,
        policyText: String,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SetRepositoryPolicyResponse {
        let input = SetRepositoryPolicyRequest(
            force: force, 
            policyText: policyText, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return try await self.setRepositoryPolicy(input, logger: logger)
    }

    /// Associates the specified tags to a resource with the specified resourceArn. If existing tags on a resource aren't specified in the request parameters, they aren't changed. When a resource is deleted, the tags associated with that resource are also deleted.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates the specified tags to a resource with the specified resourceArn. If existing tags on a resource aren't specified in the request parameters, they aren't changed. When a resource is deleted, the tags associated with that resource are also deleted.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to add tags to. Currently, the supported resource is an Amazon ECR Public repository.
    ///   - tags: The tags to add to the resource. A tag is an array of key-value pairs. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Deletes specified tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes specified tags from a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to delete tags from. Currently, the supported resource is an Amazon ECR Public repository.
    ///   - tagKeys: The keys of the tags to be removed.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Uploads an image layer part to Amazon ECR. When an image is pushed, each new image layer is uploaded in parts. The maximum size of each image layer part can be 20971520 bytes (about 20MB). The UploadLayerPart API is called once for each new image layer part.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    @Sendable
    @inlinable
    public func uploadLayerPart(_ input: UploadLayerPartRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UploadLayerPartResponse {
        try await self.client.execute(
            operation: "UploadLayerPart", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Uploads an image layer part to Amazon ECR. When an image is pushed, each new image layer is uploaded in parts. The maximum size of each image layer part can be 20971520 bytes (about 20MB). The UploadLayerPart API is called once for each new image layer part.  This operation is used by the Amazon ECR proxy and is not generally used by customers for pulling and pushing images. In most cases, you should use the docker CLI to pull, tag, and push images.
    ///
    /// Parameters:
    ///   - layerPartBlob: The base64-encoded layer part payload.
    ///   - partFirstByte: The position of the first byte of the layer part witin the overall image layer.
    ///   - partLastByte: The position of the last byte of the layer part within the overall image layer.
    ///   - registryId: The Amazon Web Services account ID, or registry alias, that's associated with the registry that you're uploading layer parts to. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that you're uploading layer parts to.
    ///   - uploadId: The upload ID from a previous InitiateLayerUpload operation to associate with the layer part upload.
    ///   - logger: Logger use during operation
    @inlinable
    public func uploadLayerPart(
        layerPartBlob: AWSBase64Data,
        partFirstByte: Int64,
        partLastByte: Int64,
        registryId: String? = nil,
        repositoryName: String,
        uploadId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UploadLayerPartResponse {
        let input = UploadLayerPartRequest(
            layerPartBlob: layerPartBlob, 
            partFirstByte: partFirstByte, 
            partLastByte: partLastByte, 
            registryId: registryId, 
            repositoryName: repositoryName, 
            uploadId: uploadId
        )
        return try await self.uploadLayerPart(input, logger: logger)
    }
}

extension ECRPublic {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: ECRPublic, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension ECRPublic {
    /// Return PaginatorSequence for operation ``describeImageTags(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeImageTagsPaginator(
        _ input: DescribeImageTagsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeImageTagsRequest, DescribeImageTagsResponse> {
        return .init(
            input: input,
            command: self.describeImageTags,
            inputKey: \DescribeImageTagsRequest.nextToken,
            outputKey: \DescribeImageTagsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeImageTags(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeImageTags in paginated output. When this parameter is used, DescribeImageTags only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeImageTags request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeImageTags returns up to 100 results and a nextToken value, if applicable. If you specify images with imageIds, you can't use this option.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository where images are described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The name of the repository that contains the image tag details to describe.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeImageTagsPaginator(
        maxResults: Int? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeImageTagsRequest, DescribeImageTagsResponse> {
        let input = DescribeImageTagsRequest(
            maxResults: maxResults, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return self.describeImageTagsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeImages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeImagesPaginator(
        _ input: DescribeImagesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeImagesRequest, DescribeImagesResponse> {
        return .init(
            input: input,
            command: self.describeImages,
            inputKey: \DescribeImagesRequest.nextToken,
            outputKey: \DescribeImagesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeImages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - imageIds: The list of image IDs for the requested repository.
    ///   - maxResults: The maximum number of repository results that's returned by DescribeImages in paginated output. When this parameter is used, DescribeImages only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeImages request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeImages returns up to 100 results and a nextToken value, if applicable. If you specify images with imageIds, you can't use this option.
    ///   - registryId: The Amazon Web Services account ID that's associated with the public registry that contains the repository where images are described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryName: The repository that contains the images to describe.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeImagesPaginator(
        imageIds: [ImageIdentifier]? = nil,
        maxResults: Int? = nil,
        registryId: String? = nil,
        repositoryName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeImagesRequest, DescribeImagesResponse> {
        let input = DescribeImagesRequest(
            imageIds: imageIds, 
            maxResults: maxResults, 
            registryId: registryId, 
            repositoryName: repositoryName
        )
        return self.describeImagesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeRegistries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRegistriesPaginator(
        _ input: DescribeRegistriesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeRegistriesRequest, DescribeRegistriesResponse> {
        return .init(
            input: input,
            command: self.describeRegistries,
            inputKey: \DescribeRegistriesRequest.nextToken,
            outputKey: \DescribeRegistriesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeRegistries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeRegistries in paginated output. When this parameter is used, DescribeRegistries only returns maxResults results in a single page along with a nextToken response element. The remaining results of the initial request can be seen by sending another DescribeRegistries request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeRegistries returns up to 100 results and a nextToken value, if applicable.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRegistriesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeRegistriesRequest, DescribeRegistriesResponse> {
        let input = DescribeRegistriesRequest(
            maxResults: maxResults
        )
        return self.describeRegistriesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeRepositories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRepositoriesPaginator(
        _ input: DescribeRepositoriesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeRepositoriesRequest, DescribeRepositoriesResponse> {
        return .init(
            input: input,
            command: self.describeRepositories,
            inputKey: \DescribeRepositoriesRequest.nextToken,
            outputKey: \DescribeRepositoriesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeRepositories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of repository results that's returned by DescribeRepositories in paginated output. When this parameter is used, DescribeRepositories only returns maxResults results in a single page along with a nextToken response element. You can see the remaining results of the initial request by sending another DescribeRepositories request with the returned nextToken value. This value can be between 1 and 1000. If this parameter isn't used, then DescribeRepositories returns up to 100 results and a nextToken value, if applicable. If you specify repositories with repositoryNames, you can't use this option.
    ///   - registryId: The Amazon Web Services account ID that's associated with the registry that contains the repositories to be described. If you do not specify a registry, the default public registry is assumed.
    ///   - repositoryNames: A list of repositories to describe. If this parameter is omitted, then all repositories in a registry are described.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRepositoriesPaginator(
        maxResults: Int? = nil,
        registryId: String? = nil,
        repositoryNames: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeRepositoriesRequest, DescribeRepositoriesResponse> {
        let input = DescribeRepositoriesRequest(
            maxResults: maxResults, 
            registryId: registryId, 
            repositoryNames: repositoryNames
        )
        return self.describeRepositoriesPaginator(input, logger: logger)
    }
}

extension ECRPublic.DescribeImageTagsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ECRPublic.DescribeImageTagsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            registryId: self.registryId,
            repositoryName: self.repositoryName
        )
    }
}

extension ECRPublic.DescribeImagesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ECRPublic.DescribeImagesRequest {
        return .init(
            imageIds: self.imageIds,
            maxResults: self.maxResults,
            nextToken: token,
            registryId: self.registryId,
            repositoryName: self.repositoryName
        )
    }
}

extension ECRPublic.DescribeRegistriesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ECRPublic.DescribeRegistriesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ECRPublic.DescribeRepositoriesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ECRPublic.DescribeRepositoriesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            registryId: self.registryId,
            repositoryNames: self.repositoryNames
        )
    }
}
